package com.life.ai.server.modules.system.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.life.ai.server.common.domain.PageQuery;
import com.life.ai.server.common.domain.R;
import com.life.ai.server.common.utils.ValidatorUtil;
import com.life.ai.server.framework.syslog.annotation.SysLog;
import com.life.ai.server.modules.system.entity.SysRole;
import com.life.ai.server.modules.system.model.vo.SysRoleVO;
import com.life.ai.server.modules.system.service.SysRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 角色信息表 前端控制器
 *
 * @author kyle
 * @since  2024-06-14
 */
@Api(tags = "角色信息表-接口列表")
@RestController
@RequestMapping("/system/role")
public class SysRoleController {

    @Resource
    private SysRoleService sysRoleService;

    /**
     * 获取角色列表
     */
    @SaCheckPermission("system:role:list")
    @ApiOperation("角色分页")
    @GetMapping("/page")
    public R<Page<SysRole>> page(PageQuery page, SysRole role) {
        Page<SysRole> roles = sysRoleService.selectRolePage(page, role);
        return R.ok(roles);
    }

    /**
     * 获取角色列表
     */
    @SaCheckPermission("system:role:list")
    @ApiOperation("角色列表")
    @GetMapping("/list")
    public R<List<SysRole>> list(SysRole role) {
        // 非运营账户只能查看自己的角色列表
        List<SysRole> roles = sysRoleService.selectRoleList(role);
        return R.ok(roles);
    }

    /**
     * 根据角色编号获取详细信息
     *
     * @param roleId 角色ID
     */
    @SaCheckPermission("system:role:query")
    @ApiOperation("角色详情")
    @GetMapping(value = "/{roleId}")
    public R<SysRoleVO> getInfo(@PathVariable("roleId") Long roleId) {
        return R.ok(sysRoleService.selectRoleById(roleId));
    }

    /**
     * 新增角色
     */
    @SaCheckPermission("system:role:add")
    @SysLog("新增角色")
    @ApiOperation(value = "新增")
    @PostMapping("/add")
    public R<Void> add(@Validated @RequestBody SysRoleVO sysRoleVO){
        sysRoleService.addRole(sysRoleVO);
        return R.ok();
    }

    /**
     * 修改角色
     */
    @SaCheckPermission("system:role:update")
    @SysLog("修改角色")
    @ApiOperation(value = "修改")
    @PutMapping("/update")
    public R<Void> update(@Validated(ValidatorUtil.Update.class) @RequestBody SysRoleVO sysRoleVO){
        sysRoleService.updateRole(sysRoleVO);
        return R.ok();
    }

    /**
     * 删除角色
     *
     * @param id 角色ID
     */
    @SaCheckPermission("system:role:delete")
    @ApiOperation("删除角色")
    @SysLog("删除角色")
    @DeleteMapping("/delete/{id}")
    public R<Void> remove(@PathVariable("id") Long id) {
        sysRoleService.deleteRoleById(id);
        return R.ok();
    }

}